package com.intelligence.device.cloud.config;

import com.intelligence.device.cloud.service.DatepacketErrService;
import com.intelligence.entity.pojo.DatepacketErr;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;

import java.util.Arrays;

/**
 * @Author : RulerWood
 * @Data : 2024/5/27 - 10:09
 */
@Aspect
@Component
public class LogAnnotationAspect implements Ordered {
    @Autowired
    private DatepacketErrService datepacketErrService;

    /**
     * 自定义切入点位置
     * annotation（注解），为一个注解声明切入点
     */
    @Pointcut("@annotation(com.intelligence.device.cloud.config.LogAnnotation)")
    public void myAnnotationPointcut() {
    }

    /**
     * 当前方法执行之后，抛出异常时执行
     *
     * @param jp   切面对象
     */
//    @After(value = "myAnnotationPointcut()")
    @AfterThrowing(value = "myAnnotationPointcut()", throwing = "ex")
    public void afterAnnotation(JoinPoint jp,Exception ex) {
        System.err.println("我们的自定义注解执行了----》"+ex.getMessage());
        System.err.println("我们的自定义注解执行了----》" + Arrays.toString(jp.getArgs()));
        DatepacketErr datepacketErr = new DatepacketErr();
        datepacketErr.setMessage(ex.getMessage());
        datepacketErr.setMonpointid(51L);
        this.datepacketErrService.save(datepacketErr);
    }

    @Override
    public int getOrder() {
        return 1;
    }

//    @Around(value = "myAnnotationPointcut()")
//    public void aroundAnnotation(JoinPoint jp) {
//        System.err.println("我们的自定义(环绕)注解执行了----》" + Arrays.toString(jp.getArgs()));
//        System.err.println("我们的自定义(环绕)注解执行了----》" + jp.getSignature().getName());
//        System.err.println("我们的自定义(环绕)注解执行了----》" + jp.getThis());
//        System.err.println("我们的自定义(环绕)注解执行了----》" + jp.getSignature().getDeclaringTypeName());
//        System.err.println("我们的自定义(环绕)注解执行了----》" + jp.getSignature().getModifiers());
//    }

}
